import UIKit

/**
    B站：https://www.bilibili.com/video/BV144411C7Gg?p=36

    第36课
        1. extension 扩展
        2. 泛型
 */

class A {
    
}

// 扩展
extension A {
    // 只读属性
    var name: String
    {
        return "hello world"
    }
    // 等于下面
//    var name: String
//    {
//        get {
//            return "hello world"
//        }
//    }
    
    // 实例方法
    func toString() {
        print("this is A toString")
    }
    
    // 类方法
    static func toto() {
        print("this is A toto")
    }
}


let aa = A()
// 实例方法
aa.toString()
// 只读属性
print(aa.name)
// 类方法
A.toto()


extension String {
    func toLength() -> String {
        return "长度 = " + String(self.count)
    }
}

let s:String = "abcdef"
print(s.toLength())


// --------------------------------
//// 泛型 ： <T>   , T 只是大部分用这个而已，并不是固定的

func toString<T>(param: T) -> T {
    return param
}

print(toString(param: false))
print(toString(param: "abdc"))
print(toString(param: 1.5))
